package util

import "sort"

type mapEntry struct {
	key   string
	value int
}

// GetMapTopNValues 返回map中的前N个最大值
func GetMapTopNValues(m map[string]int, n int) map[string]int {
	var sortedSlice []mapEntry

	if len(m) <= n {
		return m
	}

	// 将map转换为切片，以便排序
	for k, v := range m {
		sortedSlice = append(sortedSlice, mapEntry{k, v})
	}

	// 对切片进行排序
	sort.Slice(sortedSlice, func(i, j int) bool {
		return sortedSlice[i].value > sortedSlice[j].value
	})

	// 只取前N个最大值的map
	topN := make(map[string]int)
	for i, entry := range sortedSlice {
		if i >= n {
			break
		}
		topN[entry.key] = entry.value
	}

	return topN
}
